<?php

namespace App\Http\Controllers\OperationManagement;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\OperationManagement\ProjectAreas;
use Illuminate\Database\QueryException;
use Grimzy\LaravelMysqlSpatial\Types\Polygon;

/**
 * @group 基础信息管理->环卫数据导入->环卫区域
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class ProjectAreasController extends Controller
{
    /**
     * 环卫区域查看列表----分页
     *
     * @bodyParam name string 项目名称
     * @bodyParam areas polygon 区域经纬度 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam name string 项目名称
     * @queryParam owner string 所属业主
     * @queryParam department_id int 所属部门ID 外键 部门表
     * @queryParam department->name 部门名称
     * @queryParam principal_id int 负责人id 外键 员工表
     * @queryParam employees->name 员工姓名
     * @queryParam phone string 联系电话
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam remark string 备注
     */
    public function index(Request $request)
    {
        $projectAreas = new ProjectAreas;
        $data = $projectAreas->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 环卫区域查看列表----地图搜索
     *
     * @bodyParam name string 项目名称
     * @bodyParam owner string 所属业主
     * @bodyParam departmentName string 部门名称
     * @bodyParam areas polygon 区域经纬度 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam name string 项目名称
     * @queryParam owner string 所属业主
     * @queryParam department_id int 所属部门ID 外键 部门表
     * @queryParam department->name 部门名称
     * @queryParam principal_id int 负责人id 外键 员工表
     * @queryParam employees->name 员工姓名
     * @queryParam phone string 联系电话
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam remark string 备注
     */
    public function getAll(Request $request)
    {
        $projectAreas = new ProjectAreas;
        $data = $projectAreas->getMap($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增环卫区域
     *
     * @bodyParam name string 项目名称
     * @bodyParam owner string 所属业主
     * @bodyParam department_id int 所属部门ID 外键 部门表
     * @bodyParam principal_id int 负责人id 外键 员工表
     * @bodyParam phone string 联系电话
     * @bodyParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam qy_areas string 区域面积
     * @bodyParam girth string 区域围长
     * @bodyParam remark string 备注
     *
     * @queryParam name string 项目名称
     * @queryParam owner int 所属业主
     * @queryParam department_id int 所属部门ID
     * @queryParam principal_id int 负责人id
     * @queryParam phone string 联系电话
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam remark string 备注
     *
     */
    public function store(Request $request)
    {
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $data = ProjectAreas::create($data);
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            // dd($e);
            return response()->json(encodeMsg(['message' => '数据添加失败!'],400));
        }
    }

    /**
     * 查看环卫区域
     *
     * @bodyParam id int required  园林ID
     *
     * @queryParam name string 项目名称
     * @queryParam owner string 所属业主
     * @queryParam department_id int 所属部门ID 外键 部门表
     * @queryParam department->name 部门名称
     * @queryParam principal_id int 负责人id 外键 员工表
     * @queryParam employees->name 员工姓名
     * @queryParam phone string 联系电话
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam remark string 备注
     *
     */
    public function show($id)
    {
        //创建模型
        $projectAreas = ProjectAreas::find($id);
        if($projectAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        } else {
            return response()->json(encodeMsg($projectAreas,200));
        }
    }

    /**
     * 修改环卫区域
     *
     * @bodyParam name string 项目名称
     * @bodyParam owner string 所属业主
     * @bodyParam department_id int 所属部门ID 外键 部门表
     * @bodyParam principal_id int 负责人id 外键 员工表
     * @bodyParam phone string 联系电话
     * @bodyParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam qy_areas string 区域面积
     * @bodyParam girth string 区域围长
     * @bodyParam remark string 备注
     *
     * @queryParam name string 项目名称
     * @queryParam owner string 所属业主
     * @queryParam department_id int 所属部门ID 外键 部门表
     * @queryParam principal_id int 负责人id 外键 员工表
     * @queryParam phone string 联系电话
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam remark string 备注
     *
     */
    public function update(Request $request,$id)
    {
        //创建模型
        $projectAreas = ProjectAreas::find($id);
        if($projectAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        }
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $projectAreas->update($data);
            return response()->json(encodeMsg($projectAreas,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '数据修改失败!'],400));
        }
    }

    /**
     * 删除环卫区域
     *
     * @bodyParam id int required  表ID
     * @response 204 {
     *   "message": "删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该环卫区域信息"
     * }
     */
    public function destroy($id)
    {
        //创建模型
        $projectAreas = ProjectAreas::find($id);
        if($projectAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        }
        if($projectAreas->delete()) {
            return response()->json(encodeMsg(["message" => "删除成功"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "删除失败"], 400));
        }
    }

    /**
     * 批量删除环卫区域
     *
     * @bodyParam ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "环卫区域信息删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        ProjectAreas::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "信息删除成功!"], 204));
    }
}
